
#include <stdio.h>
#include <stdlib.h>
 
enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
};

void using_enum_variable(void);
void loop_enum_variable(void);
void using_emun_in_switch(void);
void convert_int_to_enum(void);


int main()
{
    using_enum_variable();
    loop_enum_variable();
    using_emun_in_switch();
    convert_int_to_enum();
    system("pause");
    return 0;
}

void using_enum_variable(void)
{
    enum DAY day;
    day = WED;
    printf("%d\n",day);
}


void loop_enum_variable(void)
{
    enum DAY day;
    // 遍历连续的枚举元素
    for (day = MON; day <= SUN; day++) {
        printf("enum element: %d \n", day);
    }
}

void using_emun_in_switch(void)
{
    enum color { red=1, green, blue };
 
    enum  color favorite_color;
 
    /* 用户输入数字来选择颜色 */
    printf("please input your favorite color: (1. red, 2. green, 3. blue): ");
    scanf("%u", &favorite_color);
 
    /* 输出结果 */
    switch (favorite_color)
    {
    case red:
        printf("your favorite color is red.\n");
        break;
    case green:
        printf("your favorite color is green.\n");
        break;
    case blue:
        printf("your favorite color is blue.\n");
        break;
    default:
        printf("your have not choosen your favorite color.\n");
    }

}

void convert_int_to_enum(void)
{
    int a = 1;
    enum DAY workend;
    workend = (enum DAY) a; // type convertion

    // weekend = a; // wrong

    printf("weekend: %d\n", workend);
}

/*
enum　枚举名　{枚举元素1,枚举元素2,……};

enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
};
第一个枚举成员的默认值为整型的 0，后续枚举成员的值在前一个成员上加 1

enum season {spring, summer=3, autumn, winter};
没有指定值的枚举元素，其值为前一元素加 1。
也就说 spring 的值为 0，summer 的值为 3，autumn 的值为 4，winter 的值为 5


通过以下三种方式来定义枚举变量
    1、先定义枚举类型，再定义枚举变量
        enum DAY
        {
            MON=1, TUE, WED, THU, FRI, SAT, SUN
        };
        enum DAY day;
    2、定义枚举类型的同时定义枚举变量
        enum DAY
        {
            MON=1, TUE, WED, THU, FRI, SAT, SUN
        } day;
    3、省略枚举名称，直接定义枚举变量
        enum
        {
            MON=1, TUE, WED, THU, FRI, SAT, SUN
        } day;

*/